iT邦幫忙

2023 iThome 鐵人賽

DAY 4
1

Dependency Injection

談完了控制反轉,怎麼能丟下依賴注入呢?
依賴注入(Dependency Injection,DI),是控制反轉的一種實現方式,用於管理對象、組件之間的依賴關係。在依賴注入的設計模式下,依賴關係不再由被依賴的對象本身來創建或尋找,而是由外部容器或框架注入給被依賴的對象,也可以說是提供。

還是以昨天的例子來假設,我們有一個廚房,有一位廚師來做菜。在傳統的方式下,我們可能會這樣實現:

public class Kitchen {
    private Chef chef;

    public Kitchen() {
        this.chef = new Chef();
    }

    public void cook(String food) {
        chef.cooking(food);
    }
}

在這個廚房中,KitchenChef 有硬性的依賴,並在自己的構造函數中訓練出一位新的 Chef。這樣的實現方式存在以下問題:

  • 高度耦合:KitchenChef 緊密耦合,難以替換或替這位廚師增加新技能。
  • 測試困難:因為它無法輕鬆開除這名 Chef 會導致難以測試 Kitchen 的運作。

現在,讓我們使用依賴注入來改善這個問題:

public class Kitchen {
    private Chef chef;

    public Kitchen(Chef chef) {
        this.chef = chef;
    }

    public void cook(String food) {
        chef.cooking(food);
    }
}

現在,Kitchen 不再自己訓練 Chef 了!!,而是在構造函數中接受一個 Chef 實例作為參數,等於從外面找一位廚師進來!!這就是依賴注入!!我們將 Chef 的依賴關係注入 Kitchen 當中!

這樣的實現方式有以下好處:

  • 鬆散耦合:Kitchen 不再與特定的 Chef 高度耦合,您可以輕鬆替換 Chef 以獲得更多料理方式!
  • 測試容易:在測試中,可以輕鬆地找到不同 Chef,並注入到 Kitchen 中,以進行試營運!

今日總結,依賴注入是一種實現控制反轉的設計模式,它有助於改善程式的可維護性、可擴展性和測試性,並減少對象之間的耦合度。不曉得來到此處得顧客有沒有瞭解了呢!?

資料來源

https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring
https://en.wikipedia.org/wiki/Dependency_injection


上一篇
Day 3 : 控制反轉,不想做的事,丟給他來做!
下一篇
Day 5 : Spring吃了AOP?四分五裂五果實!
系列文
Spring、Spirng MVC 及 Spring Boot 自主學習旅途!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言